package com.inspinia.base.util;

/**
 * 长字符串转成短字符串方法，参照：http://fox-leon.iteye.com/blog/1434507
 * Created by veblen on 2017/6/20.
 */
public class ShortTextUtil {

    private static final String SPLIT_STR="_";

    /**
     * 生成字符串的HashCode
     * @param buf
     * @return int hashCode
     */
    private static int getHashCode(String buf) {
        int hash=5381;
        int len=buf.length();
        /* hash * 33 + c */
        while(len-- > 0) {
            hash=((hash << 5) + hash) + buf.charAt(len);
        }
        return hash;
    }

    /**
     * 通过混合Hash算法，将长字符串转为短字符串（字符串长度小于等于20时，不做处理）
     * @param str String
     * @return Hash字符串
     */
    public static String getMiscHashCode(String str) {
        if(null == str || str.length() == 0) {
            return "";
        }
        StringBuilder tmp=new StringBuilder();
        tmp.append(str.hashCode()).append(SPLIT_STR).append(getHashCode(str));

        int mid=str.length() / 2;
        String str1=str.substring(0, mid);
        String str2=str.substring(mid);
        tmp.append(SPLIT_STR).append(str1.hashCode());
        tmp.append(SPLIT_STR).append(str2.hashCode());

        return tmp.toString();
    }


    /**
     * @param args
     */
    public static void main(String[] args) {

        String sLongUrl = "607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-620111-607310-611010-620111-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-620111-607310-611010-620111-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-620111-607310-611010-620111-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-620111-607310-611010-620111-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-620111-607310-611010-620111-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-620111-607310-611010-620111-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-620111-607310-611010-620111-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-620111-607310-611010-620111-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010-607711-607310-611010"; //长链接

        String miscHashCode = getMiscHashCode(sLongUrl);
        System.out.println(miscHashCode);
//        String[] aResult = shortUrl(sLongUrl);
//        // 打印出结果
//        for (int i = 0; i < aResult.length; i++) {
//            System.out.println("[" + i + "]:::" + aResult[i]);
//        }
    }
}